// -----------------------------
// Author: 		Dhaenens Gert 
// Creation: 	2/19/2014 5:30:12 PM				
// -----------------------------

#ifndef _IPixelShader_h
#define _IPixelShader_h

#include "IShader.h"

namespace DxLib
{

	class IRenderDevice;
	class IRenderTarget;
	class IDepthStencil;
	class IBuffer;
	class ITexture2D;
	class ISamplerState;

	class DXLIB IPixelShader : public IShader
	{
	public:
		// Create the Interface
		static IPixelShader*	Create(IRenderDevice* lpDevice, void* lpByteCode, SizeT uByteCodeSize);
		// Release the Interface
		virtual void			Release() = 0;

		// Set a Sampler State
		virtual void			SetSamplerState(UInt32 uSlot, ISamplerState* lpSamplerState) = 0;

		// Set a Buffer as a Constant Buffer
		virtual void			SetBufferAsConstant(UInt32 uSlot, IBuffer* lpBuffer) = 0;
		// Set a Buffer as a Shader Resource
		virtual void			SetBufferAsResource(UInt32 uSlot, IBuffer* lpBuffer) = 0;
		// Set a Render Target as a Resource
		virtual void			SetTargetAsResource(UInt32 uSlot, IRenderTarget* lpTarget) = 0;
		// Set a Texture as a Resource
		virtual void			SetTextureAsResource(UInt32 uSlot, ITexture2D* lpTexture) = 0;
		// Set a Depth Stencil as a Resource
		virtual void			SetStencilAsResource(UInt32 uSlot, IDepthStencil* lpStencil) = 0;

		// Clear a Resource
		virtual void			ClearResource(UInt32 uSlot) = 0;
		// Clear a Sampler State
		virtual void			ClearSamplerState(UInt32 uSlot) = 0;

		// Get the Byte Code
		virtual const void*		GetByteCode() const = 0;
		// Get the Byte Code Size in Bytes
		virtual SizeT			GetByteCodeSize() const = 0;
	};

}

#endif